#include <stdbool.h>

#include "queueA.h"

// 初始化
void initA(QueueA *q) { q->head = q->tail = 0; }

// 判空
bool isEmptyA(QueueA *q) { return q->head == q->tail; }

// 判满（浪费一个格子）
bool isFullA(QueueA *q) { return (q->tail + 1) % CAPACITY == q->head; }

// 入队
bool enqueueA(QueueA *q, int x) {
  if (isFullA(q))
    return false;
  q->data[q->tail] = x;
  q->tail = (q->tail + 1) % CAPACITY;
  return true;
}

// 出队
bool dequeueA(QueueA *q, int *x) {
  if (isEmptyA(q))
    return false;
  *x = q->data[q->head];
  q->head = (q->head + 1) % CAPACITY;
  return true;
}